5장 맵리듀스 프로그래밍

1. 환경 설정 API

Configuration(org.apache.hadoop.conf.*)
  • XML 파일들로 부터 속성을 읽어 환경 설정 속성과 값의 집합을 표현
  • 각 속성은 String, 값은 자바 프리미티브(int,long)과 Class, String과 같이 다양한 타입을 사용할 수 있음
  • 리소스들을 순차적으로 Configuration에 추가할 수 있음
  • 속성이 중복되면 가장 나중에 추가된 리소스의 속성값으로 재정의
  • final 속성은 재정의 불가

2. 개발환경 설정하기

환경 설정 파일 관리하기
  • core-site.xml : HDFS와 MapReduce에서 공통으로 사용하는 설정
  • hdfs-site.xml : HDFS 데몬 설정
  • mapred-site.xml : MapReduce 데몬을 위한 설정
  • slaves : data 노드 추가 (ip, hostname)
'-conf' 옵션을 이용해 환경 설정을 지정할 수 있음

GenericOptionsParser, Tool, ToolRunner
  • 하둡은 명령행을 통한 잡 수행을 위해 helper class를 제공함
  • GenericOptionsParser는 일반적인 하둡 명령행 옵션들을 해석하고 응용프로그램이 마음껏 사용할 수 있도록 Configuration 객체에 옵션들을 설정해주는 클래스

이미지출처 : http://cloud.ozyegin.edu.tr/Hadoop-UML-Diagrams/Documentation/html/d5/d78/classorg_1_1apache_1_1hadoop_1_1util_1_1_generic_options_parser.html
  • 일반적으로 GenericOptionsParser를 직접 사용하지 않고 내부적으로 GenericOptionsParser를 사용하는 Tool 인터페이스를 구현하고 ToolRunner를 사용하는게 편리함.
  • Generic Options
    -conf <configuration file> specify a configuration file
    -D <property=value> use value for given property
    -fs <local|namenode:port> specify a namenode
    -jt <local|jobtracker:port> specify a job tracker
    -files <comma separated list of files> specify comma separated files to be copied to the map reduce cluster
    -libjars <comma separated list of jars> specify comma separated jar files to include in the classpath.
    -archives <comma separated list of archives> specify comma separated archives to be unarchived on the compute machines.

3. 유닛 테스트 작성하기

매퍼
리듀서

4. 로컬에서 실행하기

로컬 잡 실행하기
  • Tool 인터페이스를 이용해서 드라이버를 쉽게 개발
  • Tool 인터페이스를 지원하기 때문에 GenericOptionsParser가 지원하는 옵션들을 설정할 수 있음.
  • 입출력 파일 경로, 매퍼, 리듀서, 컴바이너 클래스, 출력타입 등등
  • 단일 JVM에서 맵리듀스잡을 싱행할 수 있도록 로컬 잡 실행자(runner)를 제공함.
  • 로컬 잡실행자 테스트를 위해 설계되었고매퍼와 리듀서의 코드를 디버거로 단계적으로 실행할 수 있어서 IDE에서 사용하기에 편리함.
  • MiniDFSCluster, MiniMRCluster의 한쌍의 테스트 클래스를 이용해서 인프로세스 클러스터들을 생성함.
  • 로컬잡 실행자와는 다르게 전체 HDFS와 맵리듀스 장치를 테스트 할 수 있음.
  • 미니-클러스터의 태스크트래커는 태스크를 실행하기 위하여 별도의 JVM을 제공하는데 디버깅하기 힘들수 있음.
  • 자동화 테스트 클래스에서 사용에서 광범위하게 사용됨.
  • ClusterMapReduceTestCase 추상 클래스 유용한 테스트 기반 제공.

5. 클러스터에서 실행하기

패키징
  • 클러스터 배포를 위해 프로그램을 수정할 필요 없으나 jar로 패키징 필요
  • manifest에 main클래스를 지정하지 않으면, 명령행에서 지정해야 함.
잡 배포하기
  • -conf(-fs,-jt) 옵션을 사용하여 특정 클러스터를 지정함으로써 해당 드라이버 실행 필요 있음
맵리듀스 웹 UI
  • -conf(-fs,-jt) 옵션을 사용하여 특정 클러스터를 지정함으로써 해당 드라이버 실행 필요 있음

6. 잡 튜닝하기

7. 맵리듀스 작업 흐름

  • 데이터 처리가 복잡해지면 일반적으로 더욱 복잡한 맵과 리듀스 함수를을 만들기보다는, 더 많이 맵릳휴스 잡을 수행하여 복잡성을 해결하는 것이 좋음